SISC-BE-151 게시판 반환값 변경#129
Hidden character warning
Conversation
…-151-BE-게시판-추가
개요보드 관련 DTO들(BoardResponse, CommentResponse, PostResponse)과 사용자 DTO(UserInfoResponse)의 팩토리 메서드를 변경사항
예상 코드 리뷰 난이도🎯 3 (중간) | ⏱️ ~20분 추가 주의 사항:
관련 가능성 있는 PR
제안 검토자
시
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Tip 📝 Customizable high-level summaries are now available in beta!You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.
Example instruction:
Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
backend/src/main/java/org/sejongisc/backend/user/dto/UserInfoResponse.java (1)
77-85:User를 직접 변환하는 것을 고려해보세요.현재
from(User)메서드는CustomUserDetails객체를 임시로 생성한 후 다시from(CustomUserDetails)를 호출합니다. 이는 일관성을 유지하지만, 불필요한 객체 생성이 발생합니다.더 효율적인 구현을 원하신다면 다음과 같이 직접 변환할 수 있습니다:
public static UserInfoResponse from(User user) { if (user == null) { return null; } - CustomUserDetails userDetails = new CustomUserDetails(user); - - return from(userDetails); + return new UserInfoResponse( + user.getUserId(), + user.getName(), + user.getEmail(), + user.getPhoneNumber(), + user.getPoint(), + user.getRole().name(), + List.of(new SimpleGrantedAuthority(user.getRole().name())) + ); }다만 현재 구현도 코드 중복을 피하고 일관성을 유지하므로, 성능이 문제가 되지 않는다면 유지해도 무방합니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
backend/src/main/java/org/sejongisc/backend/board/dto/BoardResponse.java(2 hunks)backend/src/main/java/org/sejongisc/backend/board/dto/CommentResponse.java(2 hunks)backend/src/main/java/org/sejongisc/backend/board/dto/PostResponse.java(2 hunks)backend/src/main/java/org/sejongisc/backend/board/service/PostServiceImpl.java(4 hunks)backend/src/main/java/org/sejongisc/backend/user/dto/UserInfoResponse.java(2 hunks)backend/src/test/java/org/sejongisc/backend/board/service/PostServiceImplTest.java(8 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
backend/src/main/java/org/sejongisc/backend/user/dto/UserInfoResponse.java (2)
backend/src/main/java/org/sejongisc/backend/auth/dto/SignupResponse.java (1)
Getter(12-77)backend/src/main/java/org/sejongisc/backend/common/auth/springsecurity/CustomUserDetails.java (1)
Getter(14-70)
🔇 Additional comments (7)
backend/src/main/java/org/sejongisc/backend/board/dto/BoardResponse.java (1)
25-25: 엔티티를 DTO로 올바르게 분리했습니다.
User엔티티를UserInfoResponseDTO로 변경하고 팩토리 메서드명을of에서from으로 변경한 것은 적절합니다. 이는 API 응답에서 엔티티를 직접 노출하지 않는 모범 사례를 따릅니다.Also applies to: 29-36
backend/src/test/java/org/sejongisc/backend/board/service/PostServiceImplTest.java (2)
90-110: 테스트 픽스처가 DTO 변환을 잘 지원합니다.DTO 변환 시 NPE를 방지하기 위해
mockUser에 필수 필드(name,role)를 추가하고,mockBoard와mockParentBoard에boardName과createdBy를 추가한 것은 적절합니다.
259-260: DTO 변환 검증이 추가되어 좋습니다.DTO 변환 후
user.getName()과board.getBoardName()검증을 추가하여 변환이 올바르게 수행되는지 확인하고 있습니다.backend/src/main/java/org/sejongisc/backend/board/dto/PostResponse.java (1)
24-25: 응답 DTO에서 엔티티 타입을 DTO 타입으로 변경했습니다.
Board를BoardResponse로,User를UserInfoResponse로 변경하여 API 응답에서 엔티티를 직접 노출하지 않도록 개선했습니다.backend/src/main/java/org/sejongisc/backend/board/dto/CommentResponse.java (1)
23-23: 엔티티를 DTO로 일관되게 변환했습니다.
User엔티티를UserInfoResponseDTO로 변경하고 팩토리 메서드를from으로 통일한 것은 다른 DTO들과 일관성을 유지합니다. 대댓글이 있는 경우와 없는 경우를 모두 처리하는 오버로드된 메서드도 적절합니다.Also applies to: 30-39, 41-51
backend/src/main/java/org/sejongisc/backend/board/service/PostServiceImpl.java (2)
26-26: 서비스 계층에서 DTO 변환을 올바르게 구현했습니다.
BoardResponse.from(),UserInfoResponse.from(),CommentResponse.from()등 DTO 팩토리 메서드를 일관되게 사용하여 엔티티를 DTO로 변환하고 있습니다. 이는 서비스 계층과 프레젠테이션 계층의 책임을 명확히 분리합니다.Also applies to: 239-243, 255-256, 306-306, 313-314
233-244: N+1 쿼리 문제를 인지하고 있는지 확인해주세요.현재 구현은 부모 댓글 각각에 대해
commentRepository.findByParentComment(parent)를 호출하여 N+1 쿼리 문제가 발생합니다. 댓글이 많은 게시물의 경우 성능 이슈가 될 수 있습니다.다음과 같은 방법으로 개선을 고려해볼 수 있습니다:
- Batch Fetch Size 설정: JPA의
@BatchSize어노테이션 사용- Fetch Join 사용: 부모-자식 댓글을 한 번에 조회
- 별도 쿼리로 일괄 조회: 부모 댓글 ID 목록으로 자식 댓글을 한 번에 조회 후 메모리에서 매핑
현재 기능에 문제가 없다면 추후 성능 개선 작업으로 미뤄도 됩니다. 다만 댓글 수가 많아질 가능성을 고려하여 모니터링이 필요합니다.
Summary by CodeRabbit
릴리스 노트
✏️ Tip: You can customize this high-level summary in your review settings.